﻿//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Xml.Linq;
//using Microsoft.Practices.ServiceLocation;
//using Sharp.Framework.Logger;

//namespace Sharp.Framework.Services
//{
//    /// <summary>
//    /// 任务管理
//    /// </summary>
//    public class TaskMangement
//    {
//        public static IList<ITask> Load(string path)
//        {
//            IList<ITask> tasks = new List<ITask>();
//            try
//            {
//                Log.Info(  string.Format("读取任务列表配置文件:{0}", path));
//                var taskXml = XElement.Load(path);
//                Log.Info(  string.Format("读取任务列表成功,任务配置:{0}", taskXml).Replace("\r\n", string.Empty));

//                var xElement = taskXml.Element("tasks");
//                if (xElement != null)
//                    foreach (var taskNode in xElement.Elements("task"))
//                    {
//                        ITask task;
//                        if (GetValue(taskNode, out task))
//                        { 
//                            tasks.Add(task);

//                        } 
//                    }
//            }
//            catch (Exception ex)
//            {
//                Log.Error(ex, "读取任务列表失败" );
//            }
//            return tasks;
//        }

//        private static bool GetValue(XElement taskNode,out ITask task)
//        {
//            task = null;
//            var typeNode = taskNode.Attribute("type");
//            if (typeNode == null || string.IsNullOrEmpty(typeNode.Value))
//            {
//                Log.Warn( string.Format("任务配置{0}节点type配置出错", taskNode));
//                return false;
//            } 
//           var type = Type.GetType(typeNode.Value, true, true);
//           task = ServiceLocator.Current.GetInstance(type) as ITask;

//           if (task == null)
//           {
//               return false;
//           }

           

//            var nameNode = taskNode.Attribute("name");
//            if (nameNode == null || string.IsNullOrEmpty(nameNode.Value))
//            {
//                Log.Warn( string.Format("任务配置{0}节点name配置出错", taskNode));
//                return false;
//            }
//            string name = nameNode.Value;
//            var descriptionNode = taskNode.Attribute("description");
//            string description = string.Empty;
//            if (descriptionNode != null)
//            {
//                description = descriptionNode.Value;
//            }
//            double interval = 1;
//            var intervalNode = taskNode.Attribute("interval");
//            if (intervalNode != null)
//            {
//                if (!double.TryParse(intervalNode.Value, out interval))
//                {
//                    Log.Warn(  string.Format("读取任务{0}interval配置出错,使用默认值:{1}", name, interval));
//                }
//            }
//            DateTime? beginStart = null;
//            var beginStartNode = taskNode.Attribute("beginStart");
//            if (beginStartNode != null)
//            {
//                DateTime time;

//                if (!DateTime.TryParse(beginStartNode.Value, out time))
//                {
//                    Log.Warn( string.Format("读取任务{0}beginStart配置出错,使用默认值:null", name));
//                }
//                else
//                {
//                    if (time <= DateTime.Now)
//                    {
//                        while (time <= DateTime.Now)
//                        {
//                            time = time.AddDays(1);
//                        }
//                        Log.Warn( 
//                                 string.Format("读取任务{0}beginStart配置出错,使用最新的值:[{1}]", name, time.ToString("yyyy-MM-dd HH:mm:ss")));
//                    }
//                    beginStart = time;
//                }
//            }
//            bool? ignoreRunningThread = null;
//            var ignoreRunningThreadNode = taskNode.Attribute("ignoreRunningThread");
//            bool _ignoreRunningThread;
//            if (ignoreRunningThreadNode != null)
//            {
//                if (!bool.TryParse(ignoreRunningThreadNode.Value, out _ignoreRunningThread))
//                {
//                    Log.Warn( string.Format("读取任务{0}ignoreRunningThread配置出错,使用默认值:null", name));
//                }
//                ignoreRunningThread = _ignoreRunningThread;
//            }
//            var paramers = new Dictionary<string, string>();
//            var parasNode = taskNode.Element("paras");
//            if (null != parasNode && parasNode.Elements("add").Any())
//            {
//                paramers = parasNode.Elements("add").ToDictionary(m =>
//                                                                      {
//                                                                          var xAttribute =
//                                                                              m.Attribute("name");
//                                                                          return xAttribute != null
//                                                                                     ? xAttribute.Value
//                                                                                     : null;
//                                                                      },
//                                                                  m =>
//                                                                      {
//                                                                          var attribute =
//                                                                              m.Attribute("value");
//                                                                          return attribute != null
//                                                                                     ? attribute.Value
//                                                                                     : null;
//                                                                      });
//            }
//            var command = new InitializeCommand(interval, name, description)
//                                            {
//                                                BeginStart = beginStart,
//                                                Paramers = paramers,
//                                            };
//            if (ignoreRunningThread.HasValue)
//            {
//                command.IgnoreRunningThread = ignoreRunningThread.Value;
//            }

//            var abstractTimingTask = task as AbstractTimingTask;
//            if (abstractTimingTask != null)
//            {
//                abstractTimingTask.Initialize(command);
//            }
//            return true;
//        }
//    }
//}